/**
 * 克隆对象，保留其原型和属性描述符。
 * @param {Object} obj 待克隆对象
 * @returns {Object} 克隆后的对象
 */
export function clone(obj) {
	return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));
}

/**
 * 深度合并两个对象，优先使用第二个对象的值。
 * @param {Object} a 目标对象
 * @param {Object} b 源对象
 * @returns {Object} 合并后的目标对象 a
 */
export function deepMerge(a, b) {
	for (let k in b) {
		if (a[k] && typeof a[k] === "object" && a[k].toString() === "[object Object]") {
			deepMerge(a[k], b[k]);
		} else {
			a[k] = b[k];
		}
	}
	return a;
}